`timescale 1ns / 1ps


module dds_module
# ( parameter sim = 0)

(
    input   wire    [11:0]   f_word          ,
    input   wire    [15:0]   p_word          ,
    input   wire             add_en          ,
    input   wire             sys_clk_p       ,
    input   wire             sys_rst_n       , 
    output  wire    [7:0]    rom_data     
    
    );
    
    reg [15:0] rom_addr      = 15'd0 ;
    reg [11 :0] rom_addr_buff = 10'd0 ;
    
    wire add_en_r =  sim? 1: add_en ;
    // 信号频率调节
    always @ ( posedge sys_clk_p )
    
        begin         
            if ( ~sys_rst_n )
                rom_addr_buff <= 10'd0 ;
            else   
                begin 
                    
                if ( add_en_r )
                    rom_addr_buff <=  f_word + rom_addr_buff ; 
                 else 
                    rom_addr_buff <=  rom_addr_buff ; 
                end 
                 
                    
        end 
    // 波形文件地址产生
    always @ ( posedge sys_clk_p  )
    
        begin         
            if ( ~sys_rst_n )
                rom_addr <= 16'd0 ;
            else
                rom_addr <= {p_word[15:12] , rom_addr_buff} ;        
        end 
          
	// 波形文件存储
    dds_rom	dds_rom_inst (
	     .address ( rom_addr       ),
	     .clock   ( sys_clk_p      ),
	     .q       ( rom_data       )
	);
       
endmodule
